export {};
// 如何约束对象=》如何约束对象中的属性
let obj: {} = {};
// 注意和数组的区别
obj = { a: 'a' };
obj = 'abc';
console.log(obj);

// 有基本类型属性的对象约束
let person: { name: string } = {
  name: 'Jack',
  // name: 123
};

// person = 123
// person = 'abc'
person = {
  name: 'Rose',
};

// 有基本类型和函数的约束
let person2: { name: string; sayHi: (msg: string) => void } = {
  name: 'Jack',
  sayHi: (msg) => {
    console.log(msg);
  },
};

// 对象里包含对象
let person3: {
  name: string;
  dog: { name: string };
  sayHi: (msg: string) => void;
} = {
  name: 'Jack',
  dog: { name: '旺财' },
  sayHi: (msg) => {
    console.log(msg);
  },
};

// 有基本类型和函数的约束
let person4: { name: string; sayHi(msg: string): void } = {
  name: 'Jack',
  sayHi(msg) {
    console.log(msg);
  },
};

console.log(person4.name, person4.sayHi('123'));

// 对象类型别名的定义

type Person = {
  name: string;
  dog?: { name: string };
  sayHi: (msg: string) => void;
};

let person5: Person = {
  name: 'Rose',
  // dog: { name: '旺财' },
  sayHi: (msg) => console.log(msg),
};
